

#ifndef __CE_ASSET_ASSET_H__
#define __CE_ASSET_ASSET_H__

#include <export.h>
#include <string>
#include <asset/assetlocator.h>
#include <iobject.h>

typedef unsigned ceAssetTypeID;

#define CE_ASSET_ID1(a)	public: static const unsigned AssetTypeID = (a % 0xff) << 24 | 0x00;
#define CE_ASSET_ID2(a,b)	public: static const unsigned AssetTypeID = (a % 0xff) << 24 | (b % 0xff) << 16 | 0x00;
#define CE_ASSET_ID3(a,b,c)	public: static const unsigned AssetTypeID = (a % 0xff) << 24 | (b % 0xff) << 16 | (c % 0xff) << 8 | 0x00;
#define CE_ASSET_ID4(a,b,c,d)	public: static const unsigned AssetTypeID = (a % 0xff) << 24 | (b % 0xff) << 16 | (c % 0xff) << 8 | (d % 0xff);
#define CE_ASSET_SUPER() ceAsset (AssetTypeID)
class CE_API ceAsset : public iObject
{
private:
	ceAssetTypeID	_type;

	ceAssetLocator	_locator;

protected:
	ceAsset(ceAssetTypeID type);

public:

	/**
	 * @brief Returns the typeID of the asset
	 *
	 * @ return The typeID of the asset
	 */
  ceAssetTypeID GetAssetTypeID () const;

	/**
	 * @brief Set a new locator for the asset.
	 *
	 * @param locator The new locator
	 */
	void SetLocator (const ceAssetLocator& locator);

	/**
	 * @brief Returns the location of the asset
	 *
	 * @return The location of the asset
	 */
	const ceAssetLocator& GetLocator () const;

};

#endif /* ! __CE_ASSET_ASSET_H__ */
